### プロジェクト19 調光ランプ **1. 説明** 調光ランプは、ポテンショメーターとArduinoコントローラーを使ってLEDの明るさを調整します。明るさは抵抗値に依存し、ポテンショメーターの端子をボードのデジタルまたはアナログピンに接続することで読み取り・調整が可能です。 さらに、このシステムはファン、電球、ヒーターなど他のデバイスの電圧や電流の制御にも応用できます。 **2. 動作原理** ![](media/B32.png) 本質的に、ポテンショメーターは抵抗値を変化させる部品です。オームの法則(U=I*R)により、抵抗は電圧に影響を与えます。今回のポテンショメーターは10Kです。 このプロジェクトでは最大抵抗が10Kです。ESP32ボードは3Vの電圧を4095分割(3/4095=0.0007326007326)し、読み取った値に0.0007326007326を掛けることでアナログ電圧を得ます。 **3. 配線図** ![](media/B33.png) **4. テストコード** ポテンショメーターのアナログ値を読み取る方法: 1. 基本ブロックを2つドラッグし、その間にボーレート設定ブロックを置き、9600に設定します。 2. 「forever」ループ内に「serial print」ブロックを追加し、印刷モードを「warp」に設定します。 3. 「pot」から「read the value」をドラッグしてserial printに接続し、ピンをIO33に設定します。 ![](media/B34.png) **5. テスト結果** 配線を接続しコードをアップロード後、シリアルモニターを開いてボーレートを9600に設定すると、アナログ値が0〜4095の範囲で表示されます。 ![](media/B35.png) **6. 拡張コード** ポテンショメーターでLEDの明るさを制御します。ご存知の通り、PWMに影響されます。ただし、アナログ値の範囲は0〜4095で、PWMの範囲は0〜255です。したがって、「map(value, fromLow, fromHigh, toLow, toHigh)」関数が必要です。 **配線図:** ![](media/B36.png) 1. 基本ブロックを2つドラッグします。 2. 変数ブロックを追加し、ローカルに設定します。型は「int」を選び、名前を「pot」とします。 ![](media/B37.png) 3. 「Data」から「map」関数をドラッグし、代入位置に置きます。mapの値を「pot IO33の値を読み取る」に設定し、範囲を(0,4095)から(0,255)に変換します。 ![](media/B38.png) 4. 最後に「LED analogWrite」ブロックを追加し、ピンをIO25、アナログ値を変数「pot」に設定します。 ![](media/B39.png) **完成コード:** ![](media/B40.png) **7. コード説明** 1. **map**関数。アナログ値の範囲を0〜4095から0〜255に変換します。 ![](media/B41.png) 2. ポテンショメーターのピンを設定してアナログ値を読み取ります。 ![](media/B42.png)